home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / jDictionary 1.8 / jdictionary-1_8-win.exe / src-1_8 / info / jdictionary / FileDownloader.java < prev    next >
Encoding:
Java Source  |  2002-08-09  |  3.3 KB  |  108 lines

  1. /*
  2.  * 01/09/2002 - 20:43:57
  3.  *
  4.  * FileDownloader.java -
  5.  * Copyright (C) 2002 Csaba KertΘsz
  6.  * kcsaba@jdictionary.info
  7.  * www.jdictionary.info
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU Lesser General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU Lesser General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU Lesser General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  */
  23.  
  24.  
  25. package info.jdictionary;
  26.  
  27. import javax.swing.JProgressBar;
  28. import javax.swing.SwingUtilities;
  29. import java.net.URL;
  30. import java.io.DataInputStream;
  31.  
  32.  
  33. public class FileDownloader {
  34.  
  35.     public boolean stop = false;
  36.  
  37.  
  38.     public void terminate() {
  39.         stop = true;
  40.     }
  41.  
  42.  
  43.     public byte[] download(URL url, JProgressBar progressBar) {
  44.         if(url == null)
  45.             return null;
  46.         DataInputStream din = null;
  47.         int offset = 0;
  48.         int length = 1024;
  49.         int temp = 0;
  50.         int fileSize = 0;
  51.         try {
  52.             fileSize = url.openConnection().getContentLength();
  53.             din = new DataInputStream(url.openStream());
  54.         }
  55.         catch (java.lang.Exception e) {
  56.             e.printStackTrace();
  57.             return null;
  58.         }
  59.         if(progressBar != null) {
  60.             progressBar.setMaximum(fileSize);
  61.             progressBar.setMinimum(0);
  62.         }
  63.         byte[] b = new byte[fileSize];
  64.  
  65.         while (true) {
  66.             try {
  67.                 if (stop) {
  68.                     din.close();
  69.                     return null;
  70.                 }
  71.                 temp = din.read(b, offset, length);
  72.                 if (temp == -1) {
  73.                     try {
  74.                         din.close();
  75.                     }
  76.                     catch(java.io.IOException e) {}
  77.                     return b;
  78.                 }
  79.                 offset = offset + temp;
  80.                 if (fileSize - offset < length)
  81.                     length = fileSize - offset;
  82.                 notifyProgressBar(progressBar, offset, fileSize);
  83.             }
  84.             catch(java.lang.Exception e) {
  85.                 e.printStackTrace();
  86.                 try {
  87.                     din.close();
  88.                 }
  89.                 catch(java.lang.Exception ex) {}
  90.                 return null;
  91.             }
  92.         }
  93.     }
  94.  
  95.  
  96.     void notifyProgressBar(final JProgressBar progressBar, final int currentState, final int topValue) {
  97.         SwingUtilities.invokeLater(new Runnable() {
  98.             public void run() {
  99.                 if (progressBar != null) {
  100.                     progressBar.setValue(currentState);
  101.                     progressBar.setString(currentState / 1024 + " " + JDictionary.getString("KB of") + " " + topValue / 1024 + " " + JDictionary.getString("KB"));
  102.                     progressBar.validate();
  103.                     progressBar.repaint();
  104.                 }
  105.             }
  106.         });
  107.     }
  108. }